/*******************************************************************************
** 文件名称：global_variable.h
** 文件作用：全局变量
** 编写作者：Tom Free 付瑞彪
** 编写时间：2021-05-29
** 文件备注：
** 更新记录：
**           2021-05-29 -> 创建文件
**                                                            <Tom Free 付瑞彪>
**
**              Copyright (c) 2018-2021 付瑞彪 All Rights Reserved
**
**       1 Tab == 4 Spaces     UTF-8     ANSI C Language(C99)
*******************************************************************************/
#ifndef __GLOBAL_VARIABLE_H__
#define __GLOBAL_VARIABLE_H__

#include "chip_cfg.h"
#include "gm_utils.h"

/* 全局变量 */
typedef struct
{
    bool timer0_int_flag;

} global_variable_t;

/* 声明外部全局变量 */
extern volatile global_variable_t global_variable;

/* eeprom标记，用于验证数据正确性 */
typedef enum
{
    EEPROM_TAG_HEAD = 0xAA,
    EEPROM_TAG_TAIL = 0X55,
} eeprom_tag_t;

/* EEPROM参数 */
typedef struct
{
    eeprom_tag_t head;              /* 头标记 */

    uint8_t      bg_brightness;     /* 背景LED亮度 */
    bool         alarm_status;      /* 闹钟状态 */
    gm_time_t    alarm_time;        /* 闹钟时间 */

    uint8_t      checksum;          /* 校验 */
    eeprom_tag_t tail;              /* 尾标记 */
} eeprom_variable_t;

/* 声明外部EEPROM变量 */
extern __no_init __root __eeprom eeprom_variable_t eeprom_variable @ 0x0000;

/*******************************************************************************
** 函数名称：global_variable_init
** 函数作用：初始化全局变量
** 输入参数：无
** 输出参数：无
** 使用样例：global_variable_init();
** 函数备注：需要在其它模块初始化前调用，最好放到程序开头
*******************************************************************************/
void global_variable_init(void);

/*******************************************************************************
** 函数名称：eeprom_variable_init
** 函数作用：初始化EEPROM变量
** 输入参数：无
** 输出参数：无
** 使用样例：eeprom_variable_init();
** 函数备注：
*******************************************************************************/
void eeprom_variable_init(void);

/*******************************************************************************
** 函数名称：eeprom_variable_set_bg_brightness
** 函数作用：设置背景LED亮度
** 输入参数：value - 亮度，1 - 11
** 输出参数：无
** 使用样例：eeprom_variable_set_bg_brightness(5);
** 函数备注：
*******************************************************************************/
void eeprom_variable_set_bg_brightness(uint8_t value);

/*******************************************************************************
** 函数名称：eeprom_variable_set_alarm_status
** 函数作用：设置闹钟开关
** 输入参数：status - 开关状态
** 输出参数：无
** 使用样例：eeprom_variable_set_alarm_status(true);
** 函数备注：
*******************************************************************************/
void eeprom_variable_set_alarm_status(bool status);

/*******************************************************************************
** 函数名称：eeprom_variable_set_alarm_time
** 函数作用：设置闹钟时间
** 输入参数：ptime - 时间指针
** 输出参数：无
** 使用样例：eeprom_variable_set_alarm_time(&time);
** 函数备注：
*******************************************************************************/
void eeprom_variable_set_alarm_time(gm_time_t *ptime);

#endif  /* __GLOBAL_VARIABLE_H__ */
